package teaching;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2022-11-07
 * Time: 20:22
 */

//选择排序
public class SelectSort {
    public static void main(String[] args) {
        //int[] arr = {101,34,119,1};
        System.out.println("排序前");
        //System.out.println(Arrays.toString(arr));
        int[] arr = new int[80000];
        //产生随机数
        for (int i = 0; i < 80000; i++) {
            arr[i] = (int) (Math.random()*800000); //生成[0-800000)数
        }

        Date data1 = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String date1 = simpleDateFormat.format(data1);
        System.out.println("排序前的时间输出=" + date1);

        //运行冒泡排序
        selectSort2(arr);

        Date data2 = new Date();
        String date2 = simpleDateFormat.format(data2);
        System.out.println("排序后的时间输出=" + date2);

    }

    public static void selectSort2(int[] arr){

        for (int i = 0; i < arr.length-1; i++) {
            int minIndex = i;
            int min = arr[i];
            for (int j =i+1; j < arr.length; j++) {
                //改成重大到小 该下面成小于就好
                if (min > arr[j]){ //min不是最小的
                    min = arr[j];
                    minIndex = j;
                }
            }
            //交换
            if (minIndex != i){
                arr[minIndex] = arr[i];
                arr[i] = min;
            }
//            System.out.println("第"+ (i+1) +"轮数据！");
//            System.out.println(Arrays.toString(arr));
        }
    }




    //选择排序
    public static void selectSort1(int[] arr){
        //逐步推到

        //第一轮
        //假定最小数的索引和值
        int minIndex = 0;
        int min = arr[0];
        for (int i =0+1; i < arr.length; i++) {
            if (min > arr[i]){ //min不是最小的
               min = arr[i];
               minIndex = i;
            }
        }
        //交换
        arr[minIndex] = arr[0];
        arr[0] = min;

        System.out.println("第一轮数据！");
        System.out.println(Arrays.toString(arr));


        //第二轮
        //假定最小数的索引和值
         minIndex = 1;
         min = arr[1];
        for (int i = 1+1; i < arr.length; i++) {
            if (min > arr[i]){ //min不是最小的
                min = arr[i];
                minIndex = i;
            }
        }
        //交换
        arr[minIndex] = arr[1];
        arr[1] = min;

        System.out.println("第二轮数据！");
        System.out.println(Arrays.toString(arr));

        //第二轮
        //假定最小数的索引和值
        minIndex = 2;
        min = arr[2];
        for (int i = 2+1; i < arr.length; i++) {
            if (min > arr[i]){ //min不是最小的
                min = arr[i];
                minIndex = i;
            }
        }
        //交换
        arr[minIndex] = arr[2];
        arr[2] = min;

        System.out.println("第二轮数据！");
        System.out.println(Arrays.toString(arr));


    }
}
